package com.example.demo.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.example.demo.pojo.User;
import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletRequest;

/**
 * 一个Token工具类 , 用于创建token , 获取token
 *
 * @author 刘二朋
 * @date 2020-11-30 13:32
 */
public class TokenTool {


    /**
     * 获取Token的方法
     *
     * @param user 要生成的Token的用户对象
     * @return 返回 , 生成的token
     */
    public static String getToken(User user) {
        String token = "";

        token = JWT.create()
//                存入需要保存在Token1的信息
                .withAudience(user.getId())
//                使用Hs256生成token , 密钥则是用户的密码
                .sign(Algorithm.HMAC256(user.getPassword()));
        return token;
    }


    /**
     * 从HttpSerletRequest 中获取Token
     *
     * @param request 客户端的请求对象
     * @return 返回 , 获取到的用户
     */
    public static String getTokenClient(HttpServletRequest request) {
// 获取用户的头部的信息
        String authorization = request.getHeader("authorization");

        if (StringUtils.isEmpty(authorization)) {
            return null;
        }
//        获取Token
        return authorization.split(" ")[1];
    }


    /**
     * 从请求里面 , 获取token , 并从token里面 , 获取 , 当前token1的用户 ,并把用户 , 返回重启
     *
     * @param request 请求对象
     * @return 当前要操作的用户
     */
    public static String getTokenUserId(HttpServletRequest request) {
        String userId = "";
//        获取Token
        String token = getTokenClient(request);
        if (!StringUtils.isEmpty(token)) {
//        获取Token里面的用户的账号 , 并把账号 , 返回出去
            userId = JWT.decode(token).getAudience().get(0);
        }
        return userId;

    }


}
